﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using SIAKADCORE.Helpers;
using SIAKADCORE.Models;
using System.Data;

namespace SIAKADCORE.Controllers
{
    /// <summary>
    /// Kelas RekomendasiController
    /// </summary>
    public static class RekomendasiController
    {
        /// <summary>
        /// Method untuk menambahkan entri rekomendasi.
        /// </summary>
        /// <param name="rekomendasi">Rekomendasi rekomendasi.</param>
        /// <returns>True ketika sukses menambahkan entri dan sebaliknya.</returns>
        public static bool Tambah(Rekomendasi rekomendasi)
        {
            string queryString = string.Format("INSERT INTO {0} ({1} ,{2}) VALUES ('{3}' ,'{4}')",
                Rekomendasi.TableName, Rekomendasi.ColumnNameIdRekomendasi, Rekomendasi.ColumnNameIsiRekomendasi,
                rekomendasi.IdRekomendasi, rekomendasi.IsiRekomendasi);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }

        /// <summary>
        /// Method untuk menghapus entri rekomendasi.
        /// </summary>
        /// <param name="idRekomendasi">Id rekomendasi yang akan diubah.</param>
        /// <param name="rekomendasi">Rekomendasi rekomendasi.</param>
        /// <returns>True ketika sukses mengubah entri dan sebaliknya.</returns>
        public static bool Ubah(string idRekomendasi, Rekomendasi rekomendasi)
        {
            string queryString = string.Format("UPDATE {0} SET {1} = '{2}' ,{3} = '{4}' WHERE {1} = '{5}'",
                Rekomendasi.TableName, Rekomendasi.ColumnNameIdRekomendasi, rekomendasi.IdRekomendasi,
                Rekomendasi.ColumnNameIsiRekomendasi, rekomendasi.IsiRekomendasi, idRekomendasi);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }

        /// <summary>
        /// Method untuk menghapus entri rekomendasi.
        /// </summary>
        /// <param name="idRekomendasi">Id rekomendasi yang akan dihapus.</param>
        /// <returns>True ketika sukses menghapus entri dan sebaliknya.</returns>
        public static bool Hapus(string idRekomendasi)
        {
            string queryString = string.Format("DELETE FROM {0} WHERE {1} = '{2}'",
                Rekomendasi.TableName, Rekomendasi.ColumnNameIdRekomendasi, idRekomendasi);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }

        /// <summary>
        /// Method untuk mendapatkan hasil query dari tabel rekomendasi.
        /// </summary>
        /// <param name="dataset">Dataset keluaran yang berisi hasil query.</param>
        /// <returns>True ketika sukses meng-query dan sebaliknya.</returns>
        public static bool GetTabel(out DataSet dataset)
        {
            string queryString = string.Format("SELECT {0} ,{1} FROM {2}",
                Rekomendasi.ColumnNameIdRekomendasi, Rekomendasi.ColumnNameIsiRekomendasi, Rekomendasi.TableName);
            return SQLHelper.Instance.ExecuteReader(queryString, out dataset);
        }

        /// <summary>
        /// Method untuk mendapatkan hasil query dari tabel rekomendasi.
        /// </summary>
        /// <param name="dataset">Dataset keluaran yang berisi hasil query.</param>
        /// <param name="customQueryString">Kustomisasi query.</param>
        /// <returns>True ketika sukses meng-query dan sebaliknya.</returns>
        public static bool GetTabel(out DataSet dataset, string customQueryString)
        {
            return SQLHelper.Instance.ExecuteReader(customQueryString, out dataset);
        }

        /// <summary>
        /// Method untuk mendapatkan id rekomendasi. Digunakan pada saat memasukkan entri baru.
        /// </summary>
        /// <returns>string kosong ketika terjadi error atau id rekomendasi baru.</returns>
        public static string GetID()
        {
            var dataset = new DataSet();
            bool isQueryAccomplished = GetTabel(out dataset);
            if (!isQueryAccomplished) return string.Empty;

            return SQLHelper.Instance.GetID(Rekomendasi.IdPrefix, Rekomendasi.IdLength, ref dataset);
        }
    }
}
